package com.vanysoft.business.base.org.dao;

import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.vanysoft.business.base.org.entity.TBaseOrg;
import com.vanysoft.business.index.entity.LoginUserinfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface BaseOrgMapper {
    int deleteByPrimaryKey(String orgcode);

    int insert(TBaseOrg record);

    int insertSelective(TBaseOrg record);

    TBaseOrg selectByPrimaryKey(String orgcode);

    TBaseOrg selectByParentCodeAndName(@Param("orgName") String orgName, @Param("parentCode") String parentCode);

    int updateByPrimaryKeySelective(TBaseOrg record);

    int updateByPrimaryKey(TBaseOrg record);

    int checkCodeExist(String orgCode);

    int queryRootOrgCount();

    int queryNormalOrgCount(String parentOrgCode);

    int queryOrgPerson(String orgCode);

    int queryChildOrgCount(String orgCode);

    List<Map<String, Object>> queryOrgTree(String orgCodes);

    List<Map<String, Object>> queryAllOrgCode();

    TBaseOrg queryUpOrg(@Param("character") String character, @Param("number") String number);

    TBaseOrg queryDownOrg(@Param("character") String character, @Param("number") String number);

    int queryOrgName(@Param("parentOrgCode") String parentOrgCode, @Param("orgName") String orgName);

    /**
     * Function Name               queryAllOrg
     *
     * @return
     * @description 查询系统中的所有部门
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年5月25日 下午5:42:23           SharpClaw_x                     Initial
     * 2017年6月30日 上午9:58:23           SharpClaw_x                     修改了排序
     * *********************************************************************
     */
    List<Map<String, Object>> queryAllOrg();

    String queryAdminOrgCodes();

    /**
     * Function Name               queryOrgUsers
     *
     * @param orgCode
     * @param search
     * @param status
     * @return
     * @description 查询所机构人员，递归
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月30日 上午10:00:49           SharpClaw_x      Initial
     * *********************************************************************
     */

    List<LoginUserinfo> queryOrgUsers(Pagination pagination, @Param("orgCode") String orgCode, @Param("search") String search, @Param("status") String status);

    List<LoginUserinfo> queryOrgUsers(@Param("orgCode") String orgCode, @Param("search") String search, @Param("status") String status);

    /**
     * Function Name               queryOnlyOrgUsers
     *
     * @param orgCode
     * @return
     * @description 只查询的当前部门下的人员
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年7月5日 上午10:20:01           SharpClaw_x      Initial
     * *********************************************************************
     */
    List<Map<String, Object>> queryOnlyOrgUsers(String orgCode);

    /**
     * Function Name               queryForbiddenOrgUsers
     *
     * @param orgCode
     * @param search
     * @return
     * @description 查询已禁用
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月27日 上午10:41:30           SharpClaw_x      Initial
     * *********************************************************************
     */
    int queryForbiddenOrgUsers(@Param("orgCode") String orgCode, @Param("search") String search);

    /**
     * Function Name               queryNotForbiddenOrgUsers
     *
     * @param orgCode
     * @param search
     * @return
     * @description 查询未禁用
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月27日 上午10:41:50           SharpClaw_x      Initial
     * *********************************************************************
     */
    int queryNotForbiddenOrgUsers(@Param("orgCode") String orgCode, @Param("search") String search);

    int queryOrgUsersCount(String orgCode);


    /**
     * Function Name               queryOrgInfoByOrgCode
     *
     * @param orgCode
     * @return
     * @description TODO(根据用户机构编号查询用户机构信息)
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年5月27日 上午11:08:02          SharpClaw_x                     Initial
     * *********************************************************************
     */
    List<Map<String, Object>> queryOrgInfoByUserCode(String userCode);

    String queryOrgChildren(String orgCode);

    List<TBaseOrg> queryOrgChildrenObj(String orgCodes);

    List<Map<String, Object>> queryOrgList(String orgCodes);

    /**
     * Function Name               loadUserManagementScopeByUserCode
     *
     * @param userCode
     * @return
     * @description 根据用户代码查询用户拥有数据权限字符串, 关联查询
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月5日 上午12:51:04          SharpClaw_x                     Initial
     * *********************************************************************
     */
    String loadDataScopeByUserCodeUnion(String userCode);


    /**
     * Function Name               queryAllOrgTree
     *
     * @return
     * @description (查询所有部门用于发送消息 - 消息中心)
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年8月29日 上午10:43:23          SharpClaw_x                     Initial
     * *********************************************************************
     */
    List<Map<String, Object>> queryAllOrgTree();


}